package com.haonan.springboot_exercise.service;

import com.haonan.springboot_exercise.bean.User;
import com.haonan.springboot_exercise.bean.pojo.Result;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @author haonan
 * @date 2021/5/13 15:18
 **/
@Service
public interface AdminService {
    /**
     * 切换到管理员模式
     * @param user 用户实体
     * @return Result
     */
    Result switchToAdmin(User user);

    /**
     * 修改用户的身份权限
     * 0 普通用户
     * 1 管理员
     * @param user_name
     * @param role_id
     * @return
     */
    Result changeRoleOfUser(String user_name, Boolean role_id);

    /**
     * 修改用户的禁用/可用状态
     * 0 禁用
     * 1 可用
     * @param user_name
     * @param state_flag
     * @return
     */
    Result changeStateOfUser(String user_name, Boolean state_flag);

    /**
     * 修改用户的smtp权限
     * 0 禁用
     * 1 可用
     * @param user_name
     * @return
     */
    Result changeSmtpFlagOfUser(String user_name, Boolean smtp_flag);

    /**
     * 修改用户的pop权限
     * 0 禁用
     * 1 可用
     * @param user_name
     * @param pop_flag
     * @return
     */
    Result changePopFlagOfUser(String user_name, Boolean pop_flag);

    /**
     * 修改用户 用户名和密码 信息
     * @param user_name
     * @param new_user_name
     * @param new_user_password
     * @return
     */
    Result changeInfoOfUser(String user_name, String new_user_name, String new_user_password);

    /**
     * 创建新用户
     * @param user User实体
     * @return
     */
    Result createNewUser(User user);

    /**
     * 删除用户
     * @param user_name 用户名
     * @return
     */
    Result deleteUser(String user_name);

    /**
     * 获取用户信息
     * @param user_name
     * @return
     */
    Result getUser(String user_name);

    /**
     * 通过用户名模糊查询出用户
     * @param fuzzy_user_name 模糊的用户名
     * @return Result，其中的data放置一个List<User>，存放模糊查询到的用户信息
     */
    Result getUserByFuzzy(String fuzzy_user_name);

    /**
     * 获取所有用户信息
     * @return Result,data是List<User>
     */
    Result getAllUser();

    /**
     * 获取Pop状态
     * @return
     */
    Result getPopState();

    /**
     * 获取Smtp状态
     * @return
     */
    Result getSmtpState();

    /**
     * 获取Pop状态
     * @return
     */
    Result getPopPort();

    /**
     * 获取Smtp状态
     * @return
     */
    Result getSmtpPort();

    /**
     * 关闭系统服务
     * @return
     */
    Result closeSystem() throws Exception;

    /**
     * 开启系统服务
     * @return
     */
    Result openSystem() throws Exception;

    /**
     * 更改服务端口号
     * @param type 类型（pop/smtp）
     * @param port 端口
     * @return
     */
    Result changePort(String type, int port) throws Exception;
}
